unit unitmainform;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
  DBGrids, StdCtrls, pqconnection, sqldb, db;

type

  { TMainForm }

  TMainForm = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    PQConnection1: TPQConnection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure MenuItem10Click(Sender: TObject);
    procedure MenuItem11Click(Sender: TObject);
    procedure MenuItem12Click(Sender: TObject);
    procedure MenuItem14Click(Sender: TObject);
    procedure MenuItem15Click(Sender: TObject);
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    procedure MenuItem7Click(Sender: TObject);
    procedure MenuItem9Click(Sender: TObject);
    procedure ordenar_grid();
  private
    total_cobrado : real;
    total_comisiones : real;
  public
    fecha_desde : string;
    fecha_hasta : string;
    empresa : string;
    persona : string;
    pagada : string;
  end;

var
  MainForm: TMainForm;

implementation

uses
  unitformempresas, unitnuevocobro, unitformbusquedaempresa;
{$R *.lfm}

{ TMainForm }

procedure TMainForm.ordenar_grid();
begin
  total_cobrado := 0;
  total_comisiones := 0;

  if SQLQuery1.Active = true then
    SQLQuery1.Close;

  if pagada = '' then
    SQLQuery1.SQL.Text := 'select * from vw_cobro where crb_fecha >= ''' + fecha_desde + ''' and crb_fecha <= '''
      + fecha_hasta + ''' and emp_nombre ilike ''%' + empresa + '%'' and crb_persona ilike ''%' + persona
      + '%'' order by crb_momento'
  else
     SQLQuery1.SQL.Text := 'select * from vw_cobro where crb_fecha >= ''' + fecha_desde + ''' and crb_fecha <= '''
      + fecha_hasta + ''' and emp_nombre ilike ''%' + empresa + '%'' and crb_persona ilike ''%' + persona
      + '%'' and crb_pagada = ' + pagada + ' order by crb_momento';

  SQLQuery1.Open;

  DBGrid1.Columns[1].Visible := false;

  DBGrid1.Columns[0].Title.Caption := 'Codigo';
  DBGrid1.Columns[2].Title.Caption := 'Fecha';
  DBGrid1.Columns[3].Title.Caption := 'Hora';
  DBGrid1.Columns[4].Title.Caption := 'Empresa';
  DBGrid1.Columns[5].Title.Caption := 'Monto';
  DBGrid1.Columns[6].Title.Caption := 'Persona de Referencia';
  DBGrid1.Columns[7].Title.Caption := 'Nro Cuenta';
  DBGrid1.Columns[8].Title.Caption := 'Tel. Contacto';
  DBGrid1.Columns[9].Title.Caption := 'Pagado?';

  DBGrid1.Columns[0].Width := 80;
  DBGrid1.Columns[2].Width := 80;
  DBGrid1.Columns[3].Width := 80;
  DBGrid1.Columns[4].Width := 150;
  DBGrid1.Columns[5].Width := 95;
  DBGrid1.Columns[6].Width := 150;
  DBGrid1.Columns[7].Width := 95;
  DBGrid1.Columns[8].Width := 95;
  DBGrid1.Columns[9].Width := 60;

  TColumn(DBGrid1.Columns[5]).DisplayFormat := '$ ####0.00';

  while not SQLQuery1.EOF do
  begin
    total_cobrado := total_cobrado + SQLQuery1.Fields[5].AsFloat;
    total_comisiones := total_comisiones + 5;
    SQLQuery1.Next;
  end;

  Edit1.Text := '$' + FloatToStr(total_cobrado);
  Edit2.Text := '$' + FloatToStr(total_comisiones);
end;

procedure TMainForm.MenuItem2Click(Sender: TObject);
begin
  Close();
end;

procedure TMainForm.MenuItem4Click(Sender: TObject);
begin
  FormEmpresas.ShowModal;
end;

procedure TMainForm.MenuItem6Click(Sender: TObject);
begin
  FormNuevoCobro.ShowModal;
  ordenar_grid();
end;

procedure TMainForm.MenuItem7Click(Sender: TObject);
var
  QueryString : string;
  codigo_borrar : string;

begin
  codigo_borrar := InputBox('Eliminar Cobro', 'Ingrese el codigo:', '');

  if codigo_borrar <> '' then
  begin
    QueryString := 'delete from cobro where crb_cdg = ' + codigo_borrar;

    MainForm.PQConnection1.ExecuteDirect('BEGIN WORK');
    MainForm.PQConnection1.ExecuteDirect(QueryString);
    MainForm.PQConnection1.ExecuteDirect('COMMIT WORK');

    ShowMessage('COBRO ELIMINADO');

    ordenar_grid();
  end;
end;

procedure TMainForm.MenuItem9Click(Sender: TObject);
begin
  fecha_desde := InputBox('Filtro por Fecha', 'Ingrese fecha desde (dd/mm/aaaa):', DateToStr(Date));
  fecha_hasta := InputBox('Filtro por Fecha', 'Ingrese fecha hasta (dd/mm/aaaa):', DateToStr(Date));

  if (fecha_desde <> '') and (fecha_hasta <> '') then
    ordenar_grid()
  else
  begin
    fecha_desde := DateToStr(Date);
    fecha_hasta := DateToStr(Date);
  end;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  fecha_desde := DateToStr(Date);
  fecha_hasta := DateToStr(Date);
  empresa := '%';
  persona := '%';
  pagada := '';

  ordenar_grid();
end;

procedure TMainForm.MenuItem10Click(Sender: TObject);
begin
  FormBusquedaEmpresa.busqueda_nombre := '';
  FormBusquedaEmpresa.busqueda_nombre := InputBox('Busqueda de Empresa', 'Ingrese parte del nombre:', '');

  if FormBusquedaEmpresa.busqueda_nombre <> '' then
  begin
    FormBusquedaEmpresa.ShowModal;
    empresa := FormbusquedaEmpresa.resultado_nombre;
    ordenar_grid();
  end
  else
  begin
    FormBusquedaEmpresa.busqueda_nombre := '';
    empresa := '%';
  end;

end;

procedure TMainForm.MenuItem11Click(Sender: TObject);
begin
  persona := InputBox('Filtro por Persona de Referencia', 'Ingrese parte del nombre:', '');

  if persona <> '' then
    ordenar_grid()
  else
    persona := '%';
end;

procedure TMainForm.MenuItem12Click(Sender: TObject);
begin
  fecha_desde := DateToStr(Date);
  fecha_hasta := DateToStr(Date);
  empresa := '%';
  persona := '%';
  pagada := '';

  ordenar_grid();
end;

procedure TMainForm.MenuItem14Click(Sender: TObject);
begin
  pagada := 'true';

  ordenar_grid();
end;

procedure TMainForm.MenuItem15Click(Sender: TObject);
begin
  pagada := 'false';

  ordenar_grid();
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  PQConnection1.Open;
end;

procedure TMainForm.DBGrid1CellClick(Column: TColumn);
var
  codigo : string;
  QueryString : string;

begin
  if SQLQuery1.FieldByName('crb_pagada').AsBoolean = false then
  begin
    if MessageDLG('Confirma marcar cobro como pagado?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      codigo := SQLQuery1.FieldByName('crb_cdg').AsString;
      QueryString := 'update cobro set crb_pagada = true where crb_cdg = ' + codigo;

      MainForm.PQConnection1.ExecuteDirect('BEGIN WORK');
      MainForm.PQConnection1.ExecuteDirect(QueryString);
      MainForm.PQConnection1.ExecuteDirect('COMMIT WORK');

      ShowMessage('COBRO MARCADO COMO PAGADO');

      ordenar_grid();
    end;
  end
  else
  begin
    if MessageDLG('Marcar cobro como pendiente?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      codigo := SQLQuery1.FieldByName('crb_cdg').AsString;
      QueryString := 'update cobro set crb_pagada = false where crb_cdg = ' + codigo;

      MainForm.PQConnection1.ExecuteDirect('BEGIN WORK');
      MainForm.PQConnection1.ExecuteDirect(QueryString);
      MainForm.PQConnection1.ExecuteDirect('COMMIT WORK');

      ShowMessage('COBRO MARCADO COMO PENDIENTE');

      ordenar_grid();
    end;
  end

end;

end.

